// 进行axios的二次封装：使用请求和响应拦截器
import axios, { type AxiosInstance } from 'axios';
import {ElMessage} from 'element-plus'; // 引入element-plus的提示组件
import { getToken } from '@/utils/token/index';

// 创建一个axios实例
const request: AxiosInstance = axios.create({
    baseURL: '/api',
    withCredentials: true, // 允许携带凭证
    headers: {
        'Content-Type': 'application/json',
        token: getToken()
    },
    timeout: 5000,// 请求超时时间
}) as AxiosInstance;

// 请求拦截器
request.interceptors.request.use((config)=>{
    let token = getToken();
    if (token){
        config.headers.token = token;
    }
    // config: 请求的配置对象
    return config;
})

// 响应拦截器
request.interceptors.response.use((response)=>{
    // response: 响应对象
    return response;
},(error)=>{
    //  失败回调 处理http网络错误
    let message = ""
    const status = error.response.status
    switch(status){
        case 401:
            message = "未授权"
            break;
        case 403:
            message = "禁止访问"
            break;
        case 404:
            message = "资源不存在"
            break;
        case 500:
            message = "服务器错误"
            break;
        default:
            message = "未知错误"
    }
    // 提示用户
    ElMessage({
        message,
        type: "error"
    });
    return Promise.reject(error)
})

export default request;